<?php

class Registrarinst_model extends CI_Model {

    function __construct() {
        parent::__construct();
    }

    public function extraePersona() {
        $tipDoc = $this->input->get("tip");
        $doc = $this->input->get("numero");
        $sql = "select perso.*,usr.usuario,dep.dptCod,insti.institucionNit,insti.institucionRazon from personas perso ";
        $sql .= "left join personasinstituciones perIns on perIns.personasId = perso.personasId ";
        $sql .= "left join instituciones insti on insti.institucionId = perIns.institucionId ";
        $sql .= "inner join usuarios usr on usr.usuarioId = perso.usuarioId ";
        $sql .= "inner join ciudades ciu on ciu.ciudadId = perso.ciudadId ";
        $sql .= "inner join departamentos dep on dep.dptCod = ciu.dptCod where perso.personaTipoDocumento = '$tipDoc' and perso.personaDocumento = '$doc' order by perIns.personaInstitucionId desc limit 1";
        $query = $this->db->query($sql);
        $obj = $query->result();
        echo json_encode($obj[0]);
        return;
    }

    public function personaInsti($instId, $pesonaId) {
        $sql = "select institucionId from personasinstituciones where personasId = '$pesonaId' and `institucionId` = '$instId'";
        $query = $this->db->query($sql);
        if ($query->num_rows() == 0) {
            //Registra a la persona con la nueva institucion
            $sql = "insert into personasinstituciones(personaInstitucionFechaAfil,personasId,institucionId) values(";
            $sql .= "now(),'$pesonaId','$instId')";
            $query = $this->db->query($sql);
        }
        return;
    }

    public function cargaTemp($transaccion, $user) {
        /* Carga la temporal con todos los resultados posibles de la consulta de personal
         * $tansaccion = Número de la transacción
         * $user = Informacion del usuario extraida de nombreUsuario(maestras_model)
         */
        $sqlAux = ($this->input->post("nit") != "") ? " and per.`personaDocumento` like '%{$this->input->post("nit")}%' " : "";
        $sqlAux .= ($this->input->post("nombre") != "") ? " and (per.`personaNombres` like '%{$this->input->post("nombre")}%' or per.`personaApellidos` like '%{$this->input->post("nombre")}%') " : "";
        $sqlAux .= ($this->input->post("genero") != "") ? " and per.`personaGenero` = '{$this->input->post("genero")}'" : "";
        $inner = "";
        $discapacidad = $this->input->post("discapacidad");
        if ($discapacidad != "") {
            $inner = "inner join discapacidades disca on disca.`personasId` = per.`personasId` and disca.`tipDiscapacidadId` = '$discapacidad'";
        }
        $sql = "select * from personas per
                inner join personasinstituciones perIns  on perIns.`personasId` = per.`personasId` $user
            $inner
            where 1=1 $sqlAux ";
        $query = $this->db->query($sql);
//        exit($sql);
        set_time_limit(0); //se hace para que no termine la conexión
        foreach ($query->result() as $value) {
            $discapacidadPersona = $this->obtieneDiscapacidades($value->personasId);
            $sql = "insert into temporal(transaccion,tempInt1,tempVarchar1,tempVarchar2,tempVarchar3,tempVarchar4,tempVarchar5) values(";
            $sql .= "'$transaccion','{$value->personasId}','{$value->personaTipoDocumento}','{$value->personaDocumento}','{$value->personaNombres}','{$value->personaApellidos}','$discapacidadPersona')";
            $this->db->query($sql);
        }
        return;
        //echo $sql;
    }

    private function obtieneDiscapacidades($personaId) {
        /* Función para concatenar todas las discapacidades que tiene una persona */
        $sql = "select tip.tipDiscapacidad from discapacidades dis 
        inner join tipdiscapacidades tip on tip.tipDiscapacidadId = dis.tipDiscapacidadId
        where dis.personasId = '$personaId' group by dis.tipDiscapacidadId";
        $query = $this->db->query($sql);
        $discapacidad = "";
        foreach ($query->result() as $row) {
            $discapacidad .= "," . $row->tipDiscapacidad;
        }
        return trim($discapacidad, ",");
    }

//fin private function obtieneDiscapacidades($personaId){

    public function postulaServicios($rol, $solicitud, $tablaId) {
        /* Función para realizar la postulacion de una institución a un servicio realizado por una empresa */
        $return = array();
        $sql = "select postulacionesId from postulaciones where solServyAseId = '$solicitud' and institucionId = '$tablaId'";
        if ($this->db->query($sql)->num_rows() > 0) {
            $return["result"] = 1;            
        } else {
            $sql = "insert INTO postulaciones(postulacionFecha,institucionId,solServyAseId) values(";
            $sql .= "now(),'$tablaId','$solicitud')";
            $this->db->query($sql);
            $return["result"] = 0;
            $sql = "select pos.postulacionesId,usr.usuario,inst.institucionRazon,sol.solServyAseNombre from postulaciones pos 
                inner join solservyase sol on sol.solServyAseId = pos.solServyAseId
                inner join empresas emp on emp.empresaId = sol.empresaId
                inner join usuarios usr on usr.usuarioId = emp.usuarioId
                inner join instituciones inst on inst.institucionId = pos.institucionId
                where pos.solServyAseId = '$solicitud' and pos.institucionId = '$tablaId'";
            $result = $this->db->query($sql)->result();
            $return["correoEmpresa"] = $result[0]->usuario;
            $return["solicitud"] = $result[0]->solServyAseNombre;
            $return["institucion"] = $result[0]->institucionRazon;            
        }
        return $return;
    } //fin public function postulaServicios($rol, $solicitud, $tablaId) {

    public function guardaSeguimiento() {
        $this->db->trans_start(); //inicia la transaccion
        $sql = "insert into seguimientocontatos(seguimientoContatoActividadRealizada,seguimientoContatoFechaCreo,seguimientoContatoDebilidades,seguimientoContatoFortalezas,seguimientoContatoMejoras,seguimientoContatoLogros,contratoId) values(";
        $sql .= "'{$this->input->post("actividad")}',now(),'{$this->input->post("debilidades")}','{$this->input->post("fortalezas")}','{$this->input->post("mejoras")}','{$this->input->post("logros")}','{$this->input->post("contrato")}')";
        $this->db->query($sql);
        if ($this->input->post("termina")) {
            $sql = "select contra.contratoId from contratos contra 
                    inner join postulaciones postu on postu.`postulacionesId`= contra.`postulacionesId`
                    inner join ofertaslaborales ofer on ofer.`ofertaLaboralId` = postu.`ofertaLaboralId`
                    where contra.`contratoId` = '{$this->input->post("contrato")}'";
            if ($this->db->query($sql)->num_rows() > 0) { //es un seguimiento para una oferta laboral
                //se cancela la experiencia laboral de la persona
                $sql = "update explaboral set `expLaboralFin` = now(),`expLaboralActual` = 'No' where `contratoId` = '{$this->input->post("contrato")}'";
                $this->db->query($sql);
            }
            $sql = "select contra.contratoId from contratos contra 
                    inner join postulaciones postu on postu.`postulacionesId`= contra.`postulacionesId`
                    inner join solservyase soli on soli.`solServyAseId` = postu.`solServyAseId`
                    where contra.`contratoId` = '{$this->input->post("contrato")}'";

            $sql = "update contratos set contratoFechaCIerre = now(),contratoCausaCierre = '{$this->input->post("causa")}',contratoEstado = 'I' where contratoId = '{$this->input->post("contrato")}'";
            $this->db->query($sql);
            echo "1";
        }
        $this->db->trans_complete();
        return;
    }

    public function expPersoExcel($transaccion) {
        $sql = "select tempInt1 from temporal where transaccion = '$transaccion'";
        $query = $this->db->query($sql);
        echo "TipoDocumento\tDocumento\tNombres\tApellidos\tUsuario\tGenero\tFechaNacimiento\tNivelAcademico\tCompetencias\tEstadoCivil\tPersonasAcargo\tEstrato\tTelefono\tAspiración Salarial Base\tAspiración Salarial Tope\tCiudad\tDepartamento\tTipo Discapacidad\tDescripción Discapacidad\tCausaDiscapacidad\tEmpresa\tContacto\tTelefono\tFechaInicio\tFechaFin\tFunciones\tActualmenteTrabajando\tTipoFormación\tInstitución\tTitulo\tFechaInicio\tFechaFinal\tEstudioTerminado\tClaseDeFormación\tTipoAdministradora\tAdministradora\tContrato\tFechaInicial\tFechaFinal\tAfiliaciónActual\tClaseAyudaTecnica\tDescripcionAyudaTecnica\tObservacionAyuda\tInstitucion\tFechaAfiliación\n";
        foreach ($query->result() as $row) {
            $sql = "select * from personas per
                    inner join usuarios usr on usr.usuarioId = per.usuarioId
                    inner join ciudades ciu on ciu.ciudadId = per.ciudadId
                    inner join departamentos dep on dep.dptCod = ciu.dptCod
                    inner join discapacidades dis on dis.personasId = per.personasId
                    inner join tipdiscapacidades tipDis on tipDis.tipDiscapacidadId = dis.tipDiscapacidadId
                    left join explaboral exp on exp.personasId = per.personasId
                    left join formacademicas forma on forma.personasId = per.personasId
                    left join tipformacion tipForma on tipForma.tipFormacionId = forma.tipFormacionId
                    left join adminispersona adms on adms.personasId = per.personasId
                    left join administradoras adm on adm.administradoraId = adms.administradoraId
                    left join tipadministradoras tipAdm on tipAdm.tipAdministradoraTip = adm.tipAdministradoraTip
                    left join personasinstituciones perIns on perIns.personasId = per.personasId 
                    left join instituciones insti on insti.institucionId = perIns.institucionId
                    left join ayudastecnicas ayu on ayu.personasId = per.personasId
                    left join tipayudastecnicas tipAyu on tipAyu.tipAyudaTecnicaId = ayu.tipAyudaTecnicaId
                    where per.personasId = '{$row->tempInt1}' group by per.`personasId`";
            $personal = $this->db->query($sql)->result();
            echo $personal[0]->personaTipoDocumento . "\t" . $personal[0]->personaDocumento . "\t" . $personal[0]->personaNombres . "\t" . $personal[0]->personaApellidos . "\t" . $personal[0]->usuario . "\t" . $personal[0]->personaGenero . "\t" . $personal[0]->personaFechaNac . "\t" . $personal[0]->personaNivelAcademico . "\t" . $personal[0]->personaCompetencias . "\t" . $personal[0]->personaEstadoCivil . "\t" . $personal[0]->personaPersonaACargo . "\t" . $personal[0]->personaEstrato . "\t" . $personal[0]->personaTelefono . "\t" . $personal[0]->personaAspiracion . "\t" . $personal[0]->personaAspiracionTope . "\t" . $personal[0]->ciudad . "\t" . $personal[0]->departamento . "\t" . $personal[0]->tipDiscapacidad . "\t" . $personal[0]->discapacidadDesc . "\t" . $personal[0]->discapacidadCausa . "\t" . $personal[0]->expLaboralEmpresa . "\t" . $personal[0]->expLaboralContacto . "\t" . $personal[0]->expLaboralTelefono . "\t" . $personal[0]->expLaboralInicio . "\t" . $personal[0]->expLaboralFin . "\t" . $personal[0]->expLaboralFunciones . "\t" . $personal[0]->expLaboralActual . "\t" . $personal[0]->tipFormacion . "\t" . $personal[0]->formAcademicaInstitucion . "\t" . $personal[0]->formAcademicaTitulo . "\t" . $personal[0]->formAcademicaInicio . "\t" . $personal[0]->formAcademicaFin . "\t" . $personal[0]->formAcademicaActual . "\t" . $personal[0]->formAcademicaTipo . "\t" . $personal[0]->tipAdministradoraTip . "\t" . $personal[0]->administradoraNombre . "\t" . $personal[0]->adminPersonaContrato . "\t" . $personal[0]->adminPersonaFecIni . "\t" . $personal[0]->adminPersonaFecFin . "\t" . $personal[0]->adminPersonaActual . "\t" . $personal[0]->tipAyudaTecnicaClase . "\t" . $personal[0]->tipAyudaTecnicaDesc . "\t" . $personal[0]->ayudaTecnicaComentario . "\t" . $personal[0]->institucionRazon . "\t" . $personal[0]->personaInstitucionFechaAfil . "\n";
        }
    }

    public function estaPersonalContra($institucionId) {
        $filtro = ($institucionId == "") ? " 1=1 " : " pper.institucionId = '$institucionId' ";
        $sql = "select count(pper.personasId) as total from personasinstituciones pper where $filtro ";
//       exit($sql);
        $obj = $this->db->query($sql)->result();
        $sql = "select insti.`institucionRazon`,per.personaTipoDocumento,per.personaDocumento,per.personaNombres,per.personaApellidos,per.personaFechaNac,tipFor.tipFormacion,per.personaAspiracion,per.personaTelefono,per.personaAspiracionTope,ciu.ciudad,dpt.departamento from personasinstituciones  pper
                inner join instituciones insti on insti.`institucionId` = pper.`institucionId`
                inner join personas per on per.personasId = pper.personasId
                inner join ciudades ciu on ciu.ciudadId = per.ciudadId
                inner join departamentos dpt on dpt.dptCod = ciu.dptCod
                left join tipformacion tipFor on tipFor.tipFormacionId = per.personaNivelAcademico
               where $filtro and pper.personaInstitucionEstado = 'A'
               and not exists (select postu.postulacionesId from postulaciones postu
                inner join contratos contra on contra.postulacionesId = postu.postulacionesId
                where $filtro and pper.personaInstitucionEstado = 'A' and postu.personasId = pper.personasId and contra.contratoEstado = 'A')";
        $this->session->unset_userdata('sqlUno');
        $this->session->set_userdata("sqlUno", $sql);
//       exit($sql);
        $totAfiliados = $obj[0]->total; //total personas afiliadas a la institucion
        $sql = "select count(pper.personasId) as total from personasinstituciones pper
                inner join postulaciones postu on postu.personasId = pper.personasId
                inner join contratos contra on contra.postulacionesId = postu.postulacionesId
                where $filtro and contra.contratoEstado = 'A'";
        $query = $this->db->query($sql)->result();
        $sql = "select insti.`institucionRazon`,per.personaTipoDocumento,per.personaDocumento,per.personaNombres,per.personaApellidos,per.personaTelefono,emp.empresaRazon,emp.empresaContacto,emp.empresaTelefono1 from personasinstituciones pper
                inner join instituciones insti on insti.`institucionId` = pper.`institucionId`
                inner join postulaciones postu on postu.personasId = pper.personasId
                inner join contratos contra on contra.postulacionesId = postu.postulacionesId
                inner join ofertaslaborales ofer on ofer.ofertaLaboralId = postu.ofertaLaboralId
                inner join empresas emp on emp.empresaId = ofer.empresaId
                inner join personas per on per.personasId = pper.personasId
                where $filtro and contra.contratoEstado = 'A'";
        $this->session->unset_userdata('sqlDos');
        $this->session->set_userdata("sqlDos", $sql);
        $totAfiliadosTra = $query[0]->total; //Total afiliados trabajando
        $totDesem = abs($totAfiliados - $totAfiliadosTra);
        return array("Asociados_Desempleados" => $totDesem, "Asociados_Empleados" => $totAfiliadosTra, "Total" => $totAfiliados);
    }

    public function estaPostulados($institucionId, $fecIni, $fecFin) {
        $filtro = ($institucionId != "") ? " postu.institucionId = '$institucionId' " : " 1=1 ";
        $fecIni = ($fecIni != "") ? $fecIni : "1986-10-01";
        $fecFin = ($fecFin != "") ? $fecFin . " 23:59:59" : "2986-10-01";
        $sql = "select count(postu.postulacionesId) as total from postulaciones postu where $filtro and postu.postulacionFecha between '$fecIni' and '$fecFin'  and postu.ofertaLaboralId is not null  and postu.`institucionId` is not null ";
        $obj = $this->db->query($sql)->result();
        $totPostulados = $obj[0]->total; //total postulaciones
        $sql = "select insti.`institucionRazon`,ofer.ofertaLaboralFechaCreo,ofer.ofertaLaboralCargo,ofer.ofertaLaboralDescripcion,ofer.ofertaLaboralRangoSalarioBase,ofer.ofertaLaboralRangoSalarioTope,emp.empresaRazon,postu.postulacionFecha,contra.contratoFecha,per.personaTipoDocumento,per.personaDocumento,per.personaNombres,per.personaApellidos from postulaciones postu
                inner join instituciones insti on insti.`institucionId` = postu.`institucionId`
                inner join ofertaslaborales ofer on ofer.ofertaLaboralId = postu.ofertaLaboralId
                inner join empresas emp on emp.empresaId = ofer.empresaId
                inner join personas per on per.personasId = postu.personasId
                inner join contratos contra on contra.postulacionesId = postu.postulacionesId
                where $filtro and postu.postulacionFecha between '$fecIni' and '$fecFin'  and postu.`institucionId` is not null ";
        $this->session->unset_userdata('sqlUno');
        $this->session->set_userdata("sqlUno", $sql);
        $totPostContra = $this->db->query($sql)->num_rows();
        $sql = "select insti.`institucionRazon`,ofer.ofertaLaboralFechaCreo,ofer.ofertaLaboralCargo,ofer.ofertaLaboralDescripcion,ofer.ofertaLaboralRangoSalarioBase,ofer.ofertaLaboralRangoSalarioTope,emp.empresaRazon,postu.postulacionFecha,postu.postulacionFechaPreseleccion,postu.postulacionMotivoNO,per.personaTipoDocumento,per.personaDocumento,per.personaNombres,per.personaApellidos from postulaciones postu
                inner join instituciones insti on insti.`institucionId` = postu.`institucionId`
                inner join ofertaslaborales ofer on ofer.ofertaLaboralId = postu.ofertaLaboralId
                inner join empresas emp on emp.empresaId = ofer.empresaId
                inner join personas per on per.personasId = postu.personasId
                where $filtro and postu.postulacionFecha between '$fecIni' and '$fecFin'  and postu.`institucionId` is not null  and not exists(
                select * from contratos contra where contra.postulacionesId = postu.postulacionesId)";
        $this->session->unset_userdata('sqlDos');
        $this->session->set_userdata("sqlDos", $sql);
        $tmp = abs($totPostulados - $totPostContra);
        return array("Postulados_Contratados" => $totPostContra, "Postulados_no_Contratados" => $tmp, "Total" => $totPostulados);
    }

    public function enviaContrato($personas, $preseId) {
        /* Función para extraer todas las ofertas laborales donde la institución ha sido preseleccionada */
        $this->db->trans_start(); //inicia la transaccion
        $sql = "select * from preseleccioninstituciones where `preseInstiId` = '$preseId'";
        $preselDatos = $this->db->query($sql)->result();
        //Pasa todas las personas a una cadena para que no cuenten como postulados
        $cadenaPersona = "";
        foreach ($personas as $persona) {
            $cadenaPersona .= $persona . ",";
        }
        $cadenaPersona = trim($cadenaPersona, ",");
        //verifica que el numero de postulados no exceda el numero de vacantes disponibles para la oferta
        $sql = "select count(postu.`postulacionesId`) as total,ofer.`ofertaLaboralVacantes` from postulaciones postu
            inner join ofertaslaborales ofer on ofer.`ofertaLaboralId` = postu.`ofertaLaboralId`
            where postu.`ofertaLaboralId` = '{$preselDatos[0]->ofertaLaboralId}' and postu.`postulacionPreseleccion` = 'Si' and postu.postulacionesId not in ($cadenaPersona) group by postu.`ofertaLaboralId`";
//        exit($sql);
        $result = $this->db->query($sql);
        if ($result->num_rows() > 0) {
            $vacantes = $result->result();
            $vacantes = $vacantes[0]->ofertaLaboralVacantes - $vacantes[0]->total;
        }else
            $vacantes = 100000000000000000000000000000;
        if (count($personas) > $vacantes)
            return "2";
        else {
            //recorre cada uno de las personas
            foreach ($personas as $persona) {
                //Conulta el estado de la preseleccion de la persona si esta preseleccionado lo cambia a no y viceversa
                $sql = "select pos.`postulacionPreseleccion` from postulaciones pos
                inner join ofertaslaborales ofer on ofer.`ofertaLaboralId` = pos.`ofertaLaboralId`
                inner join preseleccioninstituciones pres on pres.`ofertaLaboralId` = pos.`ofertaLaboralId` and pos.`institucionId` = pres.`institucionId`
                where pos.`postulacionesId` = '$persona' and pres.`preseInstEstado` = 'A' and ofer.`ofertaLaboralEstado` = 'A'";
                $result = $this->db->query($sql);
                if ($result->num_rows() > 0) {
                    $tmpEstadoPre = $result->result();
                    $tmpEstadoPre = ($tmpEstadoPre[0]->postulacionPreseleccion == "Si") ? "No" : "Si";
                } else {
                    $tmpEstadoPre = "Si";
                }
                //actualiza el registro de la persona
                $sql = "update postulaciones pos
                inner join ofertaslaborales ofer on ofer.`ofertaLaboralId` = pos.`ofertaLaboralId`
                inner join preseleccioninstituciones pres on pres.`ofertaLaboralId` = pos.`ofertaLaboralId` and pos.`institucionId` = pres.`institucionId`
                set pos.`postulacionPreseleccion` = '$tmpEstadoPre',pos.`postulacionFechaPreseleccion` = now()
                where pos.`postulacionesId` = '$persona' and pres.`preseInstEstado` = 'A' and ofer.`ofertaLaboralEstado` = 'A'";
                $this->db->query($sql);
            }
        }
        $this->db->trans_complete();
        return "1";
    }

//fin public function enviaContrato($personas, $preseId) {
}

// fin clase
?>
